package com.muse.genericity;

import java.util.ArrayList;
import java.util.List;

/**
 * 指定类型通配符的下限 -- 参数为泛型的方法可以使用了
 */
public class TypeWildcard5 {
    public static void main(String[] args) {
        List<Integer> intList = new ArrayList<>();
        List<Number> numList = new ArrayList<>();
        print(intList);
        print(numList);
    }

    /** ? super Number：指定通配符的下限，即调用本方法传递的List后尖括号里的类型只能是Integer及其父类 */
    public static void print(List<? super Integer> list) {
        list.add(new Integer(100)); // 参数为泛型的方法可以使用了
        list.add(null); // 没问题
        // list.add(new Object()); // 错误

        // 返回值为泛型的方法还是不能使用（或说是只能赋值给Object类型）
        for (int i =0; i < list.size(); i++) {
            // Integer integer = list.get(i); // 错误
            Object obj = list.get(i); // 只能赋值给Object类型
            System.out.println(obj);
        }
    }
}
